package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 设置跨域，让前端允许访问后台的接口
 */
@Configuration
public class CORSConf implements WebMvcConfigurer{

    @Bean
    public MyInterceptor myInterceptor() {
        return new MyInterceptor();
    }

    // 配置虚拟路径和实体路径的映射关系
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 默认的图片虚拟路径
        registry.addResourceHandler("/images/***")
                .addResourceLocations("file:D:/file/");
        // 头像的虚拟路径
        registry.addResourceHandler("/avtar/***")
                .addResourceLocations("file:D:/file/avtar/");
        // 朋友圈的虚拟路径
        registry.addResourceHandler("/circle/***")
                .addResourceLocations("file:D:/file/circle/");
    }

    // 配置跨域的
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 设置映射
        registry.addMapping("/**")
                // 设置域
                .allowedOrigins("*")
                // 设置请求的方式GET、POST等
                .allowedMethods("*")
                // 设置头
                .allowedHeaders("*");
    }

    // 添加了拦截请求的代码
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 配置拦截器
        registry.addInterceptor(myInterceptor())
                // 要拦截的请求路径，**表示我们拦截所有的请求路径
                .addPathPatterns("/**/**")
                // 不拦截的路径
                // 方式-[1]
                // .excludePathPatterns("A1","A2")
                // 方式-[2]
                // .excludePathPatterns("A1")
                // .excludePathPatterns("A2")
                .excludePathPatterns("/login","/register","/getCode")
        ;
    }
}